/**
 * Interfície del servidor del subsistema de manteniment de proves
 * 
 * @author Grup TDP 1X4J
 */
package edu.uoc.tdp.common;

import edu.uoc.tdp.beans.proves.*;
import java.rmi.RemoteException;
import java.text.ParseException;
import java.util.List;

public interface RemotProvesInterface extends java.rmi.Remote {
   /**
     * Accessor de lectura. Obté una prova
     * @param idProva               Identificador de la prova
     * @return Prova                Instància de prova
     * @throws RemoteException
     * @throws EOlympicsException 
     */ 
    Prova getProva(Integer idProva)throws RemoteException,EOlympicsException;
    /**
     * Accessor de lectura. Obté una llistat de proves
     * @param descripcio                Descipcio de la prova
     * @param iniInscripcio             Data d'inici d'inscripció
     * @param fiInscripcio              Data de fi d'inscripció
     * @param iniRealitzacio            Data d'inici de realització 
     * @param fiRealitzacio             Data final de realització 
     * @return  Llistat de proves       Instàncies de la classe prova
     * @throws RemoteException
     * @throws EOlympicsException
     * @throws EOlympicsExceptionProva 
     */
    List<Prova> getProves(String descripcio, String iniInscripcio, String fiInscripcio, String iniRealitzacio, String fiRealitzacio)throws RemoteException,EOlympicsException,EOlympicsExceptionProva;
    /**
     * Accessor d'escriptura. Guarda una prova a la Base de dades
     * @param prova                     Prova a guardar
     * @return  Enter                   Numero d'operacions realitzades contra el SGBD
     * @throws RemoteException
     * @throws EOlympicsException
     * @throws EOlympicsExceptionProva
     * @throws ParseException 
     */
    int setProva (Prova prova)throws RemoteException,EOlympicsException,EOlympicsExceptionProva,ParseException;
    /**
     * Accessor de lectura. Obté un llistat de rondes d'una prova
     * @param idProva                   identificador de la prova
     * @return  Rondes                  Instàncies de la classe ronda
     * @throws RemoteException
     * @throws EOlympicsException
     * @throws EOlympicsExceptionProva 
     */
    List<Ronda> getRondes(String idProva)throws RemoteException,EOlympicsException,EOlympicsExceptionProva;        
    /**
     * Accessor d'escriptura. Cancela una prova del sistema
     * @param prova                 Prova a cancelar
     * @return Enter                Numero d'operacions realitzades contra el SGBD
     * @throws RemoteException
     * @throws EOlympicsException 
     */
    int clearProva(Prova prova)throws RemoteException,EOlympicsException;    
    /**
     * Accessor de lectura. Obté les proves que es poden tancar les competicions
     * @return  Proves                  Instàncies de la classe proves
     * @throws RemoteException
     * @throws EOlympicsException
     * @throws EOlympicsExceptionProva 
     */
    List<Prova> getProvesPerTancar()throws RemoteException, EOlympicsException, EOlympicsExceptionProva;
    /**
     * Accessor de lectura. Obté les proves que es poden tancar les inscripcions
     * @return Proves                   Instàncies de la classe prova
     * @throws RemoteException
     * @throws EOlympicsException
     * @throws EOlympicsExceptionProva 
     */
    List<Prova> getProvesInscripcions()throws RemoteException, EOlympicsException, EOlympicsExceptionProva;
    /**
     * Tanca la isncripció  d'una prova
     * @param prova                     Prova a tancar l'inscripció
     * @throws RemoteException
     * @throws EOlympicsException
     * @throws EOlympicsExceptionProva 
     */
    void tancarInscripcio(Prova prova)throws RemoteException, EOlympicsException, EOlympicsExceptionProva;
    /**
     * Accessor d'escriptura. Inscriu els participants en una ronda final
     * @param prova                         Prova a la qual s'ha d'inscriure els estudiants
     * @throws RemoteException
     * @throws EOlympicsException
     * @throws EOlympicsExceptionProva 
     */
    void inscriureDirectaFinal(Prova prova) throws RemoteException, EOlympicsException, EOlympicsExceptionProva;
    /**
     * Tanca la participació d'una prova i computa els resultats de la prova
     * @param prova                 Prova que cal tancar la participació
     * @param tipusRonda            Tipus de ronda que cal computar
     * @throws RemoteException
     * @throws EOlympicsException
     * @throws EOlympicsExceptionProva 
     */
    void tancarParticipacio(Prova prova, String tipusRonda)throws RemoteException, EOlympicsException, EOlympicsExceptionProva;
    /**
     * Inscriu els 10 primers classificats dels participants d'una ronda eliminatoria a la ronda final
     * @param prova                 Prova
     * @param tipusRonda            Tipus de ronda
     * @throws RemoteException
     * @throws EOlympicsException
     * @throws EOlympicsExceptionProva 
     */
    void inscriureAFinal(Prova prova, String tipusRonda) throws RemoteException, EOlympicsException, EOlympicsExceptionProva;
}